home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 6
/
FM Towns Free Software Collection 6.iso
/
t_os
/
xbmconv
/
xbmconv.bas
< prev
next >
Wrap
BASIC Source File
|
1993-07-08
|
7KB
|
236 lines
10000 '拡張子を .BMP から .XBM に変更
10010 'データを大文字から小文字に変更(xvなどに対応)
10020 ' <<<<< XBM CONVERTER Ver2.0 >>>>>
10030 ' 1992,1993 STUDIO MU PRESENTS
10040 ' Programmed by Gandalf of the Valley of Wind
10050 '
10060 SCREEN @0:COLOR 7,0:WIDTH 80,25:CONSOLE 22,3,0:CLS
10070 ON ERROR GOTO *TRAPERR
10080 '
10090 WID=320 '幅
10100 HEIGHT=240 '高さ
10110 PATH$=".\" 'パス名
10120 F$="" 'ファイル名
10130 XBM_MADE=0 'XBMを作成したら-1 ELSE 0
10140 XBM_OLD=0 '新しい画像をロードしたら-1 ELSE 0
10150 '
10160 DIM PAT$(38400),WIN%(12960)
10170 GOSUB *BOX
10180 '
10190 *MENU
10200 GET@A(0,400)-(639,479),WIN%
10210 LINE(0,400)-(639,479),PRESET,,BF
10220 LOCATE 0,24:PRINT USING"SIZE X=### / Y=###";WID,HEIGHT;
10230 PRINT " PATH=";PATH$;
10240 PRINT " FILENAME=";F$;
10250 'IF F$<>"" THEN PRINT " FILENAME=";F$;
10260 IF XBM_MADE THEN PRINT" 《XBM有り》" ELSE PRINT
10270 PRINT"COMMAND ?";
10280 BEEP:CMD=VAL(INPUT$(1))
10290 IF 1<=CMD AND CMD<=7 THEN 10370
10300 PRINT
10310 PRINT" 1:TIF ロード 2:XBM ロード 3:TIF セーブ 4:XBM セーブ"
10320 PRINT" 5:画像反転 6:サイズ設定 7:XBM 作成"
10330 LOCATE 65,24:COLOR 15:PRINT"HIT ANY KEY";
10340 A$=INPUT$(1):COLOR 7:PRINT
10350 GOTO 10220
10360 '
10370 PRINT CMD;":";
10380 ON CMD GOSUB *TIFLOAD,*XBMLOAD,*TIFSAVE,*XBMSAVE, *REVERSE,*SIZE,*XBMGEN
10390 GOTO *MENU
10400 '
10410 *TIFLOAD
10420 PRINT"TIF ロード"
10430 GOSUB *FILENAME_IN
10440 '
10450 GOSUB *SURE:IF A$="N" THEN RETURN
10460 GOSUB *BOX
10470 LOAD@ PATH$+F$+".TIF"
10480 GOSUB *BOX
10490 XBM_OLD=-1
10500 RETURN
10510 '
10520 *XBMLOAD
10530 PRINT"XBM ロード"
10540 GOSUB *FILENAME_IN
10550 '
10560 GOSUB *SURE:IF A$="N" THEN RETURN
10570 GOSUB *BOX
10580 OPEN "I",#1,PATH$+F$+".XBM"
10590 INPUT #1,A$
10600 IF INSTR(A$,"#define")=0 THEN 10590
10610 XBMX=VAL(MID$(A$,INSTR(A$,"_width")+6)):PRINT XBMX;
10620 IF XBMX MOD 8>0 THEN XBMX=XBMX+8-(XBMX MOD 8)
10630 INPUT #1,A$
10640 IF INSTR(A$,"#define")=0 THEN 10630
10650 XBMY=VAL(MID$(A$,INSTR(A$,"_height")+7)):PRINT XBMY;
10660 INPUT #1,A$:IF INSTR(A$,"{")=0 THEN 10660
10670 '
10680 W=1:N=0
10690 FOR Y=1 TO XBMY
10700 FOR X=1 TO XBMX\8
10710 INPUT #1,A$
10720 PAT$(N)=MID$(A$,3)
10730 N=N+1
10740 W=W+1:IF W=13 AND EOF(1)=0 THEN INPUT #1,A$:W=1
10750 NEXT
10760 NEXT
10770 '
10780 N=0
10790 FOR Y=0 TO XBMY-1
10800 FOR X=0 TO XBMX-7 STEP 8
10810 A=VAL("&H"+PAT$(N))
10820 FOR I=0 TO 7
10830 IF A MOD 2 THEN PRESET(X+I,Y) ELSE PSET(X+I,Y)
10840 A=A\2
10850 NEXT
10860 N=N+1
10870 NEXT
10880 NEXT
10890 '
10900 CLOSE #1
10910 '
10920 GOSUB *BOX
10930 XBM_OLD=-1
10940 RETURN
10950 '
10960 *TIFSAVE
10970 PRINT"TIF セーブ"
10980 GOSUB *FILENAME_IN
10990 '
11000 GOSUB *SURE:IF A$="N" THEN RETURN
11010 GOSUB *BOX
11020 SAVE@ PATH$+F$+".TIF",(0,0)-(WID-1,HEIGHT-1)
11030 GOSUB *BOX
11040 RETURN
11050 '
11060 *XBMSAVE
11070 PRINT"XBM セーブ"
11080 IF XBM_MADE=-1 THEN 11100
11090 PRINT"ビットマップデータが作成されていません。":RETURN
11100 IF XBM_OLD=0 THEN 11160
11110 PRINT"表示されている画像のビットマップデータは作成されていません。"
11120 PRINT"最後に作成したビットマップデータを出力しますか (Y/N)? ";
11130 A$=INPUT$(1):PRINT A$
11140 IF A$="N" OR A$="n" THEN RETURN
11150 '
11160 GOSUB *FILENAME_IN
11170 '
11180 GOSUB *SURE:IF A$="N" THEN RETURN
11190 GOSUB *BOX
11200 OPEN "O",#1,PATH$+F$+".XBM"
11210 PRINT #1,"#define ";F$;"_width";WID
11220 'PRINT "#define ";F$;"_width";WID
11230 PRINT #1,"#define ";F$;"_height";HEIGHT
11240 'PRINT "#define ";F$;"_height";HEIGHT
11250 PRINT #1,"static char ";F$;"_bits[] = {"
11260 'PRINT "static char ";F$;"_bits[] = {"
11270 I=0
11280 *LOOP1
11290 PRINT #1," ";
11300 'PRINT " ";
11310 *LOOP2
11320 PRINT #1,"0x";PAT$(I);
11330 'PRINT "0x";PAT$(I);
11340 I=I+1:IF I=N THEN GOTO *FIN
11350 PRINT #1,",";
11360 'PRINT ",";
11370 IF (I MOD 12)<>0 THEN *LOOP2
11380 PRINT #1,""
11390 'PRINT
11400 GOTO *LOOP1
11410 *FIN
11420 PRINT #1,"};"
11430 'PRINT "};"
11440 CLOSE
11450 RETURN
11460 '
11470 *REVERSE
11480 PRINT"画像反転"
11490 PUT@A(0,400)-(639,479),WIN%
11500 LINE(0,0)-(639,479),XOR,7,BF
11510 RETURN
11520 '
11530 *SIZE
11540 PRINT "サイズ設定"
11550 PUT@A(0,400)-(639,479),WIN%
11560 PRINT"サイズ設定 (←/→/↓/↑ or 4/6/2/8 , END=[RET])"
11570 '
11580 CMD=ASC(INPUT$(1))
11590 GOSUB *BOX
11600 WID=WID+(CMD=&H1D)*8-(CMD=&H1C)*8+(CMD=&H34)*8-(CMD=&H36)*8
11610 HEIGHT=HEIGHT+(CMD=&H1E)-(CMD=&H1F)+(CMD=&H38)*8-(CMD=&H32)*8
11620 WID=WID-(WID<1)*640+(WID>640)*640
11630 HEIGHT=HEIGHT-(HEIGHT<1)*480+(HEIGHT>480)*480
11640 GOSUB *BOX
11650 LOCATE 0,24:PRINT USING"SIZE X=### / Y=###";WID,HEIGHT;
11660 IF CMD<>13 THEN 11580
11670 PRINT:PRINT:RETURN
11680 '
11690 *XBMGEN
11700 PRINT"XBM 作成"
11710 PUT@A(0,400)-(639,479),WIN%
11720 PRINT"ビットマップを作成します。";
11730 GOSUB *SURE:IF A$="N" THEN RETURN
11740 GOSUB *BOX
11750 N=0
11760 '
11770 FOR Y=0 TO HEIGHT-1
11780 FOR X=0 TO WID-8 STEP 8
11790 LINE(X,Y)-(X+7,Y),XOR,7
11800 A=-POINT(X+7,Y)*8-POINT(X+6,Y)*4-POINT(X+5,Y)*2-POINT(X+4,Y)
11810 B=-POINT(X+3,Y)*8-POINT(X+2,Y)*4-POINT(X+1,Y)*2-POINT(X,Y)
11820 PAT$(N)=MID$("0123456789abcdef",A+1,1) +MID$("0123456789abcdef",B+1,1)
11830 N=N+1
11840 NEXT
11850 NEXT
11860 '
11870 PRINT"変換終了。"
11880 LINE(0,0)-(WID-1,HEIGHT-1),XOR,7,BF
11890 GOSUB *BOX
11900 XBM_MADE=-1:XBM_OLD=0
11910 RETURN
11920 '
11930 '--------------------------------------------------------------------
11940 '
11950 *FILENAME_IN
11960 PRINT "PATHNAME "+PATH$+" -> ";
11970 LINE INPUT A$
11980 IF A$<>"" THEN PATH$=A$
11990 PRINT "FILENAME "+F$+" -> ";
12000 LINE INPUT A$
12010 IF A$<>"" THEN F$=A$
12020 RETURN
12030 '
12040 *BOX
12050 LINE(0,0)-(WID-1,HEIGHT-1),XOR,7,B
12060 RETURN
12070 '
12080 *SURE
12090 PRINT"よろしいですか (Y/N)? ";
12100 A$=INPUT$(1):PRINT A$
12110 IF A$="n" THEN A$="N"
12120 RETURN
12130 '
12140 *TRAPERR
12150 BEEP
12160 '
12170 IF ERR<>64 THEN 12240
12180 PRINT"ファイルを上書きします。よろしいですか (Y/N)? ";
12190 A$=INPUT$(1):PRINT A$
12200 IF A$<>"N" AND A$<>"n" THEN 12220
12210 PRINT "出力を中止します。":RESUME *MENU
12220 IF ERL=11020 THEN KILL F$+".TIF":RESUME
12230 KILL F$+".XBM":RESUME
12240 IF ERR<>63 THEN 12290
12250 PRINT"ファイルが見つかりません。"
12260 GOSUB *BOX
12270 RESUME *MENU
12280 '
12290 IF ERR<>112 THEN 12330
12300 PRINT"16色モードのデータではありません。"
12310 RESUME *MENU
12320 '
12330 PRINT"エラー";ERR;" / エラー行";ERL
12340 ON ERROR GOTO 0